package com.itany.corejava.code16_反射;

import java.lang.reflect.Modifier;
import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2023年05月31日 16:47
 */
public class Test02_常用方法 {

    public static void main(String[] args) {
        Class c = User.class;

        // 获取包名.类名
        System.out.println("类全名" + c.getName());

        // 获取类名
        System.out.println("类名:" + c.getSimpleName());

        // 获取实现的接口
        System.out.println("实现的接口:" + Arrays.toString(c.getInterfaces()));

        // 获取父类,如果没有继承任何类,其父类为Object
        System.out.println("父类:" + c.getSuperclass());

        // 获取当前类所在的包名
        System.out.println("包名:" + c.getPackage());
        System.out.println("包名:" + c.getPackage().getName());

        // 判断当前类是否是接口
        System.out.println("是否是接口:" + c.isInterface());
        Class c2 = SomeInterface.class;
        System.out.println("是否是接口:" + c2.isInterface());

        // 获取修饰符,返回一个数字
        int i = c.getModifiers();
        System.out.println(i);
        // 通过修饰符对象Modifier提供的toString(int i)方法获取具体修饰符
        String modifier = Modifier.toString(i);
        System.out.println(modifier);

        try {
            Object obj = c.newInstance();
            System.out.println(obj);
        } catch (InstantiationException e) {
            System.out.println("实例化异常,该类没有无参构造方法");
        } catch (IllegalAccessException e) {
            System.out.println("非法访问异常,无参构造方法不能被外部访问,此时无参构造属于私有方法");
        }
    }

}
